home *** CD-ROM | disk | FTP | other *** search
/ Disc to the Future 2 / Disc to the Future Part II Programmer's Reference (Wayzata Technology)(6013)(1992).bin / MAC / THINKC / TCL1 / GRAPH_FO / (GRAPH / CGRAPHTE / CLINKTAS.C < prev    next >
Text File  |  1991-02-12  |  2KB  |  91 lines

  1. /******************************************************************************
  2.     CLinkTask.h
  3.  
  4.     SUPERCLASS = CGraphTask.c
  5.  
  6.     Copyright ⌐ 1991 Maarten Meijer. All rights reserved.
  7.         CIS 100016,1764; FidoNet 2:512/114
  8. *******************************************************************************/
  9.  
  10. #include "CLinkTask.h"
  11.  
  12. static    CursHandle    gLinker = NULL;
  13.  
  14. /******************************************************************************
  15.     IGraphTask
  16.         Override to search the esssential things for linking.
  17. *******************************************************************************/
  18. void
  19. CLinkTask::IGraphTask(short aNameIndex, CPanorama *theRama, Graph *theGraph,
  20.         Point from) {
  21.     inherited::IGraphTask(aNameIndex, theRama, theGraph, from);
  22.  
  23.     if(gLinker == NULL)
  24.         gLinker = GetCursor(10);
  25.     SetCursor(*gLinker);
  26.  
  27.  
  28.     itsFromVertex = itsGraph->FindVertex(from);
  29.     itsToVertex = NULL;
  30.     }
  31.  
  32. void
  33. CLinkTask::EndTracking(Point *currPt, Point *prevPt, Point *startPt) {
  34.     inherited::EndTracking(currPt, prevPt, startPt);
  35.     Do();
  36.     }
  37.  
  38. /******************************************************************************
  39.     Draw
  40.  
  41.         Draw the line to link the two vertices.
  42. *******************************************************************************/
  43. void
  44. CLinkTask::Draw(Point a, Point b) {
  45.     Point    c;
  46.  
  47.     c = itsFromVertex->GetCenter();
  48.  
  49.     MoveTo(c.h, c.v);
  50.     LineTo(b.h, b.v);
  51.     }
  52.  
  53.  
  54. /******************************************************************************
  55.     Do
  56.         Make the link between two vertices if the mousedrag was succesful.
  57. *******************************************************************************/
  58. void
  59. CLinkTask::Do() {
  60.     GrVertex *        newVertex;
  61.     GrEdge *        newEdge;
  62.  
  63.     newVertex = itsGraph->FindVertex(itsStop);
  64.     if(    ( itsFromVertex != (GrVertex *)NULL    ) &&
  65.         ( newVertex != (GrVertex *)NULL        ) &&
  66.         /* multi graph check */
  67.         ( newEdge = itsGraph->AddEdge(itsFromVertex, newVertex, TRUE) ) ) {
  68.             itsEdge = newEdge;
  69.             Notify();
  70.             }
  71.     else
  72.         Dispose();
  73.     }
  74.  
  75. /******************************************************************************
  76.     Undo
  77.         Delete the link just made
  78. *******************************************************************************/
  79. void
  80. CLinkTask::Undo() {
  81.     Rect    area;
  82.  
  83.     itsRama->Prepare();
  84.     itsGraph->RemoveEdge(itsEdge, TRUE);
  85.     }
  86.  
  87. void
  88. CLinkTask::Redo() {
  89.     itsRama->Prepare();
  90.     Do();
  91.     }